#include "led.h"

void LED_Init(void)
{
    // 1.时钟配置
    // RCC寄存器的基地址 0x4002 1000  APB2偏移地址 0x18，使能GPIOC的时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;

    // 2.GPIO工作模式配置
    // GPIOC的基地址 0x4001 1000，配置PC13的 0011 输出模式
    GPIOC->CRH &= ~GPIO_CRH_CNF13;
    GPIOC->CRH |= GPIO_CRH_MODE13;

    // 3.关灯
    LED_Off(LED1);
}

void LED_On(uint16_t led)
{
    GPIOC->ODR &= ~led;
}

void LED_Off(uint16_t led)
{
    GPIOC->ODR |= led;
}

void LED_Toggle(uint16_t led)
{
    // 需要先判断当前LED的状态，读取IDR对应位
    if (GPIOC->IDR & led == 0)
    {
        // 亮状态
        LED_Off(led);
    }
    else
    {
        // 灭状态
        LED_On(led);
    }
}

void LED_OnAll(uint16_t *leds, uint8_t size)
{
    for (uint8_t i = 0; i < size; i++)
    {
        LED_On(*(leds + i));
    }
}

void LED_OffAll(uint16_t *leds, uint8_t size)
{
    for (uint8_t i = 0; i < size; i++)
    {
        LED_Off(*(leds + i));
    }
}
